/**
 * 计算两个时间的间隔天数
 * @param {String} beginDate - 例如: '2020-04-25' 
 * @param {String} endDate  - 例如: '2020-04-26'
 * @return {Number} 返回时间间隔，为整数，有正负
 */
const getDateDiff = (beginDate, endDate) => {
  let startTime = new Date(beginDate); // 开始时间
  let endTime = new Date(endDate); // 结束时间
  //console.log(Math.floor((endTime - startTime) / 1000 / 60 / 60 / 24)); // 天数
  return Math.floor((endTime - startTime) / 1000 / 60 / 60 / 24)
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}

/**
 * 格式化时间为'2020-01-01'的格式
 * @param {Date}} date - Date类型 例如formatNumber(new Date())获取当前日期
 * @return {String} 返回当前时间的字符串形式 例如: '2020-04-25'
 */
const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()

  return [year, month, day].map(formatNumber).join('-')
}

/**
 * 推算日期
 * @param {String} date - 日期的字符串形式, 如'2020-05-08' 
 * @param {Number} num       - 推算的天数(整数形式), 正数往后推，负数往前推
 * @return {String} 返回日期的字符串形式, 如'2020-05-11' 
 */
const getNewDate = (date, num) => {
  //实例化一个当前时间的对象，当前时间就是用户选择的时间
  const currentDate = new Date(date)

  //实例化一个新时间的对象，新时间就是需要推算出的时间
  let newDate = new Date()
  //设置实例化出的newData的时间，用原时间加上天数即可
  newDate.setDate(currentDate.getDate() + num)

  //返回的时间需要格式化成字符串形式，方便展示
  return formatTime(newDate)
}


//用法示例
//getDateDiff('2020-04-30', formatTime(new Date()))

module.exports = {
  getDateDiff: getDateDiff,
  formatTime: formatTime,
  getNewDate: getNewDate,
}
//getDateDiff('2020-04-30', formatTime(new Date()))

